home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / WINDOWS / WC_30P.ARJ / DDE_SDK.ZI$ / PAYROLL.C < prev    next >
Text File  |  1991-10-17  |  22KB  |  794 lines

  1. #include <windows.h>
  2.  
  3. #include "basedefs.h"
  4. #include "payroll.h"
  5.  
  6. #define YIELDsc \
  7.   {\
  8.   int i;\
  9.   MSG message;\
  10.   for ( i = 0; i < 5; i++ )\
  11.   while (PeekMessage (&message, 0, 0, 0, PM_REMOVE))\
  12.     {\
  13.     TranslateMessage(&message);\
  14.     DispatchMessage(&message);\
  15.     }\
  16.   }
  17.  
  18. WINPROC WndProc ( WINDOWS_PARAMS );
  19. DLGPROC PayrollDlgProc ( DIALOG_PARAMS  );
  20.  
  21. void RestoreSettings ( void );
  22. void SaveSettings    ( void );
  23.  
  24. void FillComboBoxes ( HWND hDlg, int iID, LPSTR szData );
  25. void ReArrangeCategoryData ( HWND hDlg, int iID, LPSTR szData );
  26. void MakeTransaction ( void );
  27.  
  28. extern WORD FAR PASCAL  WWWDDERun ( LPSTR, BOOL, LPSTR, HWND );
  29.  
  30. extern void Add      ( PMONEY Sum,
  31.                 MONEY  Adder1, 
  32.                 MONEY  Adder2 );
  33.  
  34. extern void Subtract ( PMONEY  Difference,
  35.                 MONEY   Subber1, 
  36.                 MONEY   Subber2 );
  37.  
  38. extern BOOL bFigureDollarAmount ( LPSTR szIDD_AMOUNT, PMONEY pfAmount );
  39. extern int ItoA ( char *szString );
  40. extern int CentsItoA ( char *szString );
  41. extern LONG LtoA ( char *szString );
  42. extern void DollarsCents ( MONEY Cash, char *szBuckage, BYTE Flags );
  43.  
  44.  
  45. /**************************************************************
  46. *                                                             *
  47. *                   Global Variables                          *
  48. *                                                             *
  49. **************************************************************/
  50.  
  51. //extern int __argc;               // # of Command line parameters
  52. //extern char **__argv;            // Command line parameter table
  53.  
  54. HANDLE ghInst;
  55. HWND   ghWnd;
  56. char   szAppName[]     = "PAYROLL";
  57. char   szCaptionName[] = "Payroll Deposit";
  58. char   szTopic[64];      // i.e. TUT
  59. int    CentsPerDollar = 100;
  60. char   cComma    = ',';
  61. char   cCurrency = '$';
  62. char   cDecimal  = '.';
  63. char   szNullString[] = "";
  64. char   szIniFileName[144];
  65.  
  66.  
  67. HANDLE hCommand;
  68. HANDLE hReturn;
  69.  
  70. LPSTR  szCommand;
  71. LPSTR  szReturn;
  72.  
  73. BOOL   bRegister;
  74.  
  75. typedef struct tagITEM
  76.   {
  77.   MONEY        fAmount;
  78.   char         szCategory[66];
  79.   }                          
  80. ITEM;
  81.  
  82. ITEM Items[10];
  83.  
  84. MONEY fNet;
  85. MONEY fGross;
  86. MONEY fGrossMinusNet;
  87.  
  88.  
  89. /**************************************************************
  90. *                                                             *
  91. *                      SanityCheck                            *
  92. *                                                             *
  93. **************************************************************/
  94. BOOL UserError ( void )
  95. {
  96.   MessageBox ( NULL, 
  97.                "Payroll is a WinCheck Add-On Tool. "
  98.                "Please run this tool from WinCheck. "
  99.                "If this tool has not been installed "
  100.                "from WinCheck, please select \"Add Tool...\""
  101.                "from the WinCheck \"Tools\" menu.",
  102.                "Payroll",
  103.                MB_OK );
  104.   return FALSE;
  105. }
  106.  
  107. /**************************************************************
  108. *                                                             *
  109. *                      Intl                                   *
  110. *                                                             *
  111. **************************************************************/
  112. void SetUpInternational ( void )
  113. {
  114.    char szIni[2];
  115.    int  i;
  116.  
  117.    GetProfileString ( "intl", "sCurrency", szNullString, szIni, 2 );
  118.    if (!(*szIni))
  119.      cCurrency = '$';
  120.    else
  121.      cCurrency = *szIni;
  122.  
  123.    GetProfileString ( "intl", "sThousand", szNullString, szIni, 2 );
  124.    if (!(*szIni))
  125.      cComma = ',';
  126.    else
  127.      cComma = *szIni;
  128.  
  129.    GetProfileString ( "intl", "sDecimal", szNullString, szIni, 2 );
  130.    if (!(*szIni))
  131.      cDecimal = '.';
  132.    else
  133.      cDecimal = *szIni;
  134.  
  135.    i = GetProfileInt ( "intl", "iCurrDigits", 2 );
  136.  
  137.    if ( i > 4 ) i = 4;
  138.  
  139.    CentsPerDollar = 1;
  140.    while ( i )
  141.      {
  142.      CentsPerDollar *= 10;
  143.      i--;
  144.      }
  145. }
  146.  
  147. /**************************************************************
  148. *                                                             *
  149. *                      WinMain                                *
  150. *                                                             *
  151. **************************************************************/
  152.  
  153. int PASCAL WinMain (HANDLE hInstance,  HANDLE hPrevInstance, 
  154.                     LPSTR lpszCmdLine, int    nCmdShow       )
  155. {
  156.   MSG         msg       ;
  157.   WNDCLASS    wndclass  ;
  158.   int i;
  159.  
  160.  
  161.   if (*lpszCmdLine != '/') return UserError();
  162.  
  163.   switch ( *(lpszCmdLine+1) )
  164.     {
  165.     case 'R':  // Register WinCheck
  166.  
  167.       bRegister = TRUE;
  168.       break;
  169.  
  170.     case 'L':
  171.  
  172.       bRegister = FALSE;
  173.       break;
  174.  
  175.     default:
  176.  
  177.       return UserError();
  178.     }
  179.  
  180.   // Set up the topic
  181.  
  182.   lstrcpy ( szTopic, lpszCmdLine+3 );
  183.  
  184.   GetModuleFileName ( hInstance, szIniFileName, 63 );
  185.   i = lstrlen ( szIniFileName );
  186.   while (szIniFileName[i] != '\\') i--;
  187.   i++;
  188.   szIniFileName[i] = 0;  // Chop off PAYROLL.EXE
  189.  
  190.   lstrcat ( szIniFileName, "PAYROLL.INI" );
  191.  
  192.   i = 24;
  193.  
  194.   while ((!SetMessageQueue(i)) && (i >= 8)) i--;
  195.  
  196.   if (i < 8) return 0;
  197.  
  198.   SetUpInternational ( );
  199.  
  200.   if (!hPrevInstance) 
  201.     {
  202.     wndclass.style         = CS_HREDRAW | CS_VREDRAW | CS_BYTEALIGNCLIENT;
  203.     wndclass.lpfnWndProc   = WndProc ;
  204.     wndclass.cbClsExtra    = 0 ;
  205.     wndclass.cbWndExtra    = 0 ;
  206.     wndclass.hInstance     = hInstance ;
  207.     wndclass.hIcon         = NULL;
  208.     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
  209.     wndclass.hbrBackground = GetStockObject ( GRAY_BRUSH ) ;
  210.     wndclass.lpszMenuName  = (LPSTR)"PlainMenu" ;
  211.     wndclass.lpszClassName = szAppName ;
  212.  
  213.     if (!RegisterClass (&wndclass))
  214.          return FALSE;
  215.     }
  216.  
  217.   ghInst   = hInstance;
  218.  
  219.   hReturn  = GlobalAlloc ( GHND, 65535L );
  220.   hCommand = GlobalAlloc ( GHND, 65535L );
  221.  
  222.   if ((!hReturn) || (!hCommand)) return FALSE;
  223.  
  224.   szCommand = GlobalLock ( hCommand );
  225.   szReturn  = GlobalLock ( hReturn  );
  226.  
  227.   RestoreSettings( );
  228.  
  229.   ghWnd =        CreateWindow (szAppName, szCaptionName,
  230.                                WS_OVERLAPPEDWINDOW,
  231.                                0, 0,
  232.                                0, 0,
  233.                                NULL, NULL, hInstance, NULL) ;
  234.  
  235.   // No show window on the parent, instead bring up a dialog
  236.  
  237.   while (GetMessage((LPMSG)&msg, NULL, 0, 0))
  238.     {
  239.     TranslateMessage(&msg);
  240.     DispatchMessage(&msg);
  241.     }
  242.  
  243.   GlobalUnlock ( hCommand );
  244.   GlobalUnlock ( hReturn  );
  245.  
  246.   GlobalFree ( hCommand );
  247.   GlobalFree ( hReturn  );
  248.  
  249.   return msg.wParam ;
  250. }
  251.  
  252. /*********************************************************************
  253. *                                                                    *
  254. *                  ModalDialog: Calls a Modal Dialog Box             *
  255. *                                                                    *
  256. *********************************************************************/
  257.  
  258. int ModalDialog ( LPSTR TemplateName, FARPROC FunctionName, LONG dwParam )
  259. {
  260.   FARPROC  lpDialogProc;
  261.   int      RetVal;
  262.  
  263.   lpDialogProc = MakeProcInstance ( FunctionName, ghInst );
  264.   RetVal       = DialogBoxParam ( ghInst, TemplateName, ghWnd, 
  265.                                   lpDialogProc, (DWORD)dwParam );
  266.   FreeProcInstance ( lpDialogProc );
  267.   return RetVal;
  268. }
  269.  
  270. /*********************************************************************
  271. *                                                                    *
  272. *                       WndProc: Main Message Translator             *
  273. *                                                                    *
  274. *********************************************************************/
  275.  
  276. WINPROC WndProc ( WINDOWS_PARAMS )
  277. {
  278.   switch ( msg )
  279.     {
  280.     case WM_DESTROY :
  281.  
  282.       PostQuitMessage (0) ;
  283.       break ;
  284.  
  285.     case WM_CREATE:
  286.  
  287.       PostMessage ( hWnd, WM_MYCOMMAND, IDM_MODAL, 0L );
  288.       break;
  289.  
  290.     case WM_COMMAND :
  291.     case WM_MYCOMMAND :
  292.  
  293.       switch ( wParam )
  294.  
  295.         {
  296.         case IDM_MODAL :
  297.  
  298.            if (bRegister)
  299.              {
  300.              wsprintf (szCommand,
  301.                        "=e WinCheck %s "
  302.                        "[REGISTERADDON:"
  303.                        "e=\"Payroll\""
  304.                        ",d=\"%s...\""
  305.                        ",s=\"Make a Payroll Deposit\""
  306.                        ",c=\"%s\"]",
  307.  
  308.                        (LPSTR)szTopic,
  309.                        (LPSTR)szCaptionName,
  310.                        (LPSTR)szCaptionName
  311.                       );
  312.  
  313.              WWWDDERun ( szCommand, 1, szReturn, ghWnd );
  314.            
  315.              YIELDsc
  316.              }
  317.  
  318.            ModalDialog ( "PAYSTUB", PayrollDlgProc, 0L );
  319.            PostMessage ( hWnd, WM_CLOSE, 0, 0L );
  320.            break;
  321.  
  322.         default:
  323.  
  324.            return DefWindowProc ( hWnd, msg, wParam, lParam ) ;
  325.            break;
  326.         }
  327.  
  328.       break;
  329.  
  330.     default :
  331.  
  332.       return DefWindowProc ( hWnd, msg, wParam, lParam );
  333.  
  334.     }
  335.   return 0L ;
  336. }
  337.  
  338. /********************************************************************
  339. *                                                                   *
  340. *                                                                   *
  341. *                                                                   *
  342. ********************************************************************/
  343.  
  344. void CalculateItems(HWND hDlg, int iRange, BOOL bCorrect)
  345. {
  346.   int i, Start, Stop;
  347.   char szText[128];
  348.  
  349.   if (-1 == iRange)
  350.     {
  351.     Start = 0; Stop = 10;
  352.     }
  353.   else
  354.     {
  355.     Start = iRange;
  356.     Stop  = iRange+1;
  357.     }
  358.  
  359.   for ( i = Start; i < Stop; i++ )
  360.     {
  361.     GetDlgItemText ( hDlg, IDD_GROSS+i, szText, 127 );
  362.     if (*szText)
  363.       {
  364.       bFigureDollarAmount( szText, &(Items[i].fAmount) );
  365.       }
  366.     else
  367.       {
  368.       Items[i].fAmount.Dollars = 0L;
  369.       Items[i].fAmount.Cents   = 0;
  370.       }
  371.  
  372.     if (bCorrect)
  373.       {
  374.       DollarsCents ( Items[i].fAmount, szText, PLAIN );
  375.       SetDlgItemText ( hDlg, IDD_GROSS+i, szText );
  376.       }
  377.  
  378.     if (
  379.          (Items[i].fAmount.Dollars)  ||
  380.          (Items[i].fAmount.Cents)
  381.        )
  382.       {
  383.       int  Index;
  384.       BOOL bInviso;
  385.  
  386.       if (!IsWindowVisible (GetDlgItem ( hDlg, IDD_GROSS+i+100 )))
  387.         {
  388.         ShowWindow ( GetDlgItem ( hDlg, IDD_GROSS+i+100 ), SW_SHOW );
  389.  
  390.         Index = (int)SendDlgItemMessage(hDlg, IDD_GROSS+i+100, CB_GETCURSEL, 0, 0L);
  391.         if (-1 == Index) Index = 0;
  392.         SendDlgItemMessage(hDlg, IDD_GROSS+i+100, CB_GETLBTEXT, Index, (LONG)(LPSTR)szText);
  393.         SetDlgItemText (hDlg, IDD_GROSS+i+100, szText );
  394.         GetDlgItemText ( hDlg, IDD_GROSS+i+100, Items[i].szCategory, 65 );
  395.         }
  396.       else
  397.         {
  398.         GetDlgItemText ( hDlg, IDD_GROSS+i+100, Items[i].szCategory, 65 );
  399.         }
  400.       }
  401.     else
  402.       {
  403.       ShowWindow ( GetDlgItem ( hDlg, IDD_GROSS+i+100 ), SW_HIDE );
  404.       }
  405.     }
  406.  
  407.   fNet.Dollars = fGross.Dollars = Items[0].fAmount.Dollars;
  408.   fNet.Cents   = fGross.Cents   = Items[0].fAmount.Cents;
  409.  
  410.   for ( i = 1; i < 10; i++ )
  411.     {
  412.     Subtract ( &fNet, fNet, Items[i].fAmount );
  413.     }
  414.  
  415.   DollarsCents ( fNet, szText, COMMAS | CURRENCY );
  416.   SetDlgItemText ( hDlg, IDD_NETPAY, szText );
  417.  
  418.   Subtract ( &fGrossMinusNet, fGross, fNet );
  419.  
  420.   if (
  421.       (Items[0].fAmount.Dollars)  ||
  422.       (Items[0].fAmount.Cents)
  423.      )
  424.     EnableWindow ( GetDlgItem ( hDlg, IDOK ), TRUE );
  425.   else
  426.     EnableWindow ( GetDlgItem ( hDlg, IDOK ), FALSE );
  427. }
  428.  
  429. /********************************************************************
  430. *                                                                   *
  431. *                                                                   *
  432. *                                                                   *
  433. ********************************************************************/
  434.  
  435.  
  436. DLGPROC PayrollDlgProc ( DIALOG_PARAMS )
  437. {
  438.   int i;
  439.  
  440.   switch (msg)
  441.     {
  442.     case WM_INITDIALOG:
  443.  
  444.         wsprintf (szCommand, "=r WinCheck %s Getcategories", (LPSTR)szTopic );
  445.  
  446.         WWWDDERun ( szCommand, TRUE, szReturn, ghWnd );
  447.  
  448.         PostMessage ( hDlg, WM_MYCOMMAND, IDD_REPAINT, 0L );
  449.  
  450.         SetWindowText (hDlg, szCaptionName);
  451.  
  452.         for ( i = IDD_C_GROSS; i <= IDD_C_OTHER5; i++)
  453.           ShowWindow ( GetDlgItem ( hDlg, i ), SW_HIDE );
  454.  
  455.         return TRUE; 
  456.         break;
  457.  
  458.     case WM_COMMAND:
  459.     case WM_MYCOMMAND:
  460.  
  461.         switch (wParam)
  462.           {
  463.           case IDD_GROSS :
  464.           case IDD_FED   :
  465.           case IDD_STATE :
  466.           case IDD_LOCAL :
  467.           case IDD_FICA  :
  468.           case IDD_OTHER1:
  469.           case IDD_OTHER2:
  470.           case IDD_OTHER3:
  471.           case IDD_OTHER4:
  472.           case IDD_OTHER5:
  473.  
  474.             switch ( HIWORD (lParam))
  475.               {
  476.               case EN_KILLFOCUS:
  477.  
  478.                 CalculateItems(hDlg, wParam - IDD_GROSS, TRUE);
  479.                 break;
  480.  
  481.               case EN_CHANGE:
  482.  
  483.                 CalculateItems(hDlg, wParam - IDD_GROSS, FALSE);
  484.                 break;
  485.               }
  486.             break;
  487.  
  488.           case IDD_REPAINT:
  489.  
  490.             YIELDsc
  491.             FillComboBoxes        ( hDlg, IDD_C_GROSS , szReturn );
  492.             ReArrangeCategoryData ( hDlg, IDD_C_GROSS , szReturn );
  493.  
  494.             FillComboBoxes ( hDlg, IDD_C_FED   , szReturn );
  495.             FillComboBoxes ( hDlg, IDD_C_STATE , szReturn );
  496.             FillComboBoxes ( hDlg, IDD_C_LOCAL , szReturn );
  497.             FillComboBoxes ( hDlg, IDD_C_FICA  , szReturn );
  498.             FillComboBoxes ( hDlg, IDD_C_OTHER1, szReturn );
  499.             FillComboBoxes ( hDlg, IDD_C_OTHER2, szReturn );
  500.             FillComboBoxes ( hDlg, IDD_C_OTHER3, szReturn );
  501.             FillComboBoxes ( hDlg, IDD_C_OTHER4, szReturn );
  502.             FillComboBoxes ( hDlg, IDD_C_OTHER5, szReturn );
  503.  
  504.             CalculateItems(hDlg, -1, TRUE);
  505.  
  506.             break;
  507.  
  508.           case IDOK:
  509.  
  510.               CalculateItems(hDlg, -1, TRUE);
  511.               MakeTransaction ();
  512.  
  513.               break;
  514.  
  515.           case IDCANCEL:
  516.  
  517.               CalculateItems(hDlg, -1, TRUE);
  518.               EndDialog(hDlg, TRUE);
  519.               return (TRUE);
  520.  
  521.           case IDD_MEMORIZE:
  522.  
  523.               CalculateItems(hDlg, -1, TRUE);
  524.               SaveSettings( );
  525.               break;
  526.  
  527.           default:
  528.               return FALSE;
  529.  
  530.           } // end WM_COMMAND wParam switch
  531.         break;
  532.  
  533.     default:
  534.         return FALSE;
  535.     }
  536.  
  537.   return TRUE;
  538. }
  539.  
  540. /********************************************************************
  541. *                                                                   *
  542. *                                                                   *
  543. *                                                                   *
  544. ********************************************************************/
  545.  
  546. void RestoreSettings ( void )
  547. {
  548.   char szTopic[10];
  549.   char szReturn[81];
  550.   int  i;
  551.  
  552.   for ( i = 0; i < 10; i++ )
  553.     {
  554.     wsprintf ( szTopic, "L%d", i );
  555.     GetPrivateProfileString ( szAppName, szTopic, "*", szReturn, 80, szIniFileName );
  556.     if ('*' == *szReturn) // None found
  557.       {
  558.       Items[i].fAmount.Dollars = 0L;
  559.       Items[i].fAmount.Cents   = 0;
  560.       Items[i].szCategory[0]   = 0;
  561.       }
  562.     else  // Item saved
  563.       {
  564.       lstrcpy (Items[i].szCategory, szReturn);
  565.  
  566.       wsprintf ( szTopic, "T%d", i );
  567.       GetPrivateProfileString ( szAppName, szTopic, "0.00", szReturn, 80, szIniFileName );
  568.       bFigureDollarAmount ( szReturn, &(Items[i].fAmount));
  569.       }
  570.     }
  571.   
  572. }
  573. /********************************************************************
  574. *                                                                   *
  575. *                                                                   *
  576. *                                                                   *
  577. ********************************************************************/
  578.  
  579. void SaveSettings ( void )
  580. {
  581.   char szTopic[10];
  582.   char szReturn[81];
  583.   int  i;
  584.  
  585.   for ( i = 0; i < 10; i++ )
  586.     {
  587.     if (
  588.          (Items[i].fAmount.Dollars)  ||
  589.          (Items[i].fAmount.Cents)
  590.        )
  591.       {
  592.       wsprintf ( szTopic, "T%d", i );
  593.  
  594.       DollarsCents ( Items[i].fAmount, szReturn, PLAIN );
  595.  
  596.       WritePrivateProfileString (szAppName, szTopic, szReturn, szIniFileName );
  597.  
  598.       lstrcpy (szReturn, Items[i].szCategory );
  599.  
  600.       wsprintf ( szTopic, "L%d", i );
  601.  
  602.       WritePrivateProfileString (szAppName, szTopic, szReturn, szIniFileName );
  603.       }
  604.     else // Delete from ini file
  605.       {
  606.       wsprintf ( szTopic, "L%d", i );
  607.  
  608.       WritePrivateProfileString (szAppName, szTopic, NULL, szIniFileName );
  609.  
  610.       wsprintf ( szTopic, "T%d", i );
  611.  
  612.       WritePrivateProfileString (szAppName, szTopic, NULL, szIniFileName );
  613.       }
  614.     }
  615.   
  616. }
  617.  
  618.  
  619. /********************************************************************
  620. *                                                                   *
  621. *                                                                   *
  622. *                                                                   *
  623. ********************************************************************/
  624.  
  625. void FillComboBoxes ( HWND hDlg, int iID, LPSTR szData )
  626. {
  627.   int Start, Stop, i;
  628.   char szNature[128];
  629.  
  630.   Start = 0;
  631.   Stop = 0;
  632.  
  633.   while (szData[Start])
  634.     {
  635.     i = 0;
  636.     do
  637.       {
  638.       szNature[i] = szData[Start];
  639.       i++; Start++;
  640.       }
  641.     while (szData[Start] && (szData[Start] != 13));
  642.     szNature[i] = 0;
  643.     SendDlgItemMessage ( hDlg, iID, CB_ADDSTRING, 0, (LONG)(LPSTR)szNature );
  644.     i = 0;
  645.     if (szData[Start])  // Skip to next one
  646.       Start += 2;
  647.     }
  648.  
  649.   if (
  650.        (Items[iID-IDD_GROSS-100].fAmount.Dollars) ||
  651.        (Items[iID-IDD_GROSS-100].fAmount.Cents)
  652.      )
  653.     {
  654.     i = (int)SendDlgItemMessage ( hDlg, iID, CB_FINDSTRING, -1, 
  655.             (LONG)(LPSTR)(Items[iID-IDD_GROSS-100].szCategory) );
  656.  
  657.     if ( -1 == i )
  658.       i = SendDlgItemMessage ( hDlg, iID, CB_ADDSTRING, 0, 
  659.           (LONG)(LPSTR)(Items[iID-IDD_GROSS-100].szCategory) );
  660.  
  661.     if ( -1 == i )
  662.       i = 0;
  663.  
  664.     DollarsCents ( Items[iID-IDD_GROSS-100].fAmount, szNature, PLAIN );
  665.  
  666.     SetDlgItemText ( hDlg, iID - 100, szNature );
  667.    
  668.     }
  669.   else
  670.     {
  671.     i = 0;
  672.     SetDlgItemText ( hDlg, iID - 100, "0.00" );
  673.     }
  674.  
  675.   SendDlgItemMessage ( hDlg, iID, CB_SETCURSEL, i, 0L );
  676.     
  677. }
  678.  
  679. /********************************************************************
  680. *                                                                   *
  681. *                                                                   *
  682. *                                                                   *
  683. ********************************************************************/
  684.  
  685. void ReArrangeCategoryData ( HWND hDlg, int iID, LPSTR szData )
  686. {
  687.   int i, j;
  688.   char szNature[128];
  689.  
  690.   i = (int)SendDlgItemMessage ( hDlg, iID, CB_GETCOUNT, 0, 0L );
  691.   szData[0] = 0;
  692.  
  693.   for ( j = 0; j < i; j++ )
  694.     {
  695.     SendDlgItemMessage ( hDlg, iID, CB_GETLBTEXT, j, (LONG)(LPSTR)szNature );
  696.     lstrcat ( szData, szNature );
  697.     if (j != (i-1)) lstrcat ( szData, "\r\n" );
  698.     }
  699.   
  700. }
  701.  
  702. /********************************************************************
  703. *                                                                   *
  704. *                                                                   *
  705. *                                                                   *
  706. ********************************************************************/
  707.  
  708. void MakeTransaction ( void )
  709. {
  710.   char szMoney[32];
  711.   char szItem[128];
  712.   int  i, Index;
  713.  
  714.   // Step 1: Make Net Transaction
  715.  
  716.   DollarsCents ( fNet, szMoney, PLAIN );
  717.  
  718.   wsprintf (szCommand, 
  719.             "=e WinCheck %s [CMISC:"      /* Checking Misc */
  720.             "CR"                          /* credit        */
  721.             ",DESC=\"Payroll Deposit\""   /* Description   */
  722.             ",T=\"%s\""                   /* amount        */
  723.             ",L=\"%s\"]",                 /* Category      */
  724.             (LPSTR)szTopic,
  725.             (LPSTR)szMoney,
  726.             (LPSTR)Items[0].szCategory
  727.            );
  728.  
  729.   WWWDDERun ( szCommand, TRUE, szReturn, ghWnd );
  730.  
  731.   YIELDsc
  732.  
  733.   // Step 2: Make Gross-Net Transaction
  734.  
  735.   DollarsCents ( fGrossMinusNet, szMoney, PLAIN );
  736.  
  737.   wsprintf (szCommand, 
  738.             "=e WinCheck %s [CMISC:"      /* Checking Misc   */
  739.             "CR,C=X"                      /* credit, cleared */
  740.             ",DESC=\"Payroll Gross-Net\"" /* Description     */
  741.             ",T=\"%s\""                   /* amount          */
  742.             ",L=\"%s\"]",                 /* Category        */
  743.             (LPSTR)szTopic,
  744.             (LPSTR)szMoney,
  745.             (LPSTR)Items[0].szCategory
  746.            );
  747.  
  748.   WWWDDERun ( szCommand, TRUE, szReturn, ghWnd );
  749.  
  750.   YIELDsc
  751.  
  752.   // Step 3: Make Deductions
  753.  
  754.   wsprintf (szCommand, 
  755.             "=e WinCheck %s [CMISC:"         /* Checking Misc   */
  756.             "C=X"                            /* debit, cleared */
  757.             ",T=\"%s\""                      /* amount          */
  758.             ",DESC=\"Payroll Deductions\"",  /* Description     */
  759.             (LPSTR)szTopic,
  760.             (LPSTR)szMoney
  761.            );
  762.  
  763.   Index = 0;
  764.  
  765.   for ( i = 1; i < 10; i++ )
  766.     {
  767.     if (
  768.          (Items[i].fAmount.Dollars)  ||
  769.          (Items[i].fAmount.Cents)
  770.        )
  771.       {
  772.       Index++;
  773.  
  774.       DollarsCents ( Items[i].fAmount, szMoney, PLAIN );
  775.       wsprintf (szItem, ",$T=%d*%s,$L=%d*\"%s\"",
  776.                         Index,
  777.                         (LPSTR)szMoney,
  778.                         Index,
  779.                         (LPSTR)(Items[i].szCategory)
  780.                );
  781.       lstrcat ( szCommand, szItem );
  782.       }
  783.     }
  784.  
  785.   lstrcat ( szCommand, "]" );
  786.  
  787.   WWWDDERun ( szCommand, TRUE, szReturn, ghWnd );
  788.  
  789.   YIELDsc
  790.  
  791.  
  792.  
  793. }
  794.